package com.hebeu.gfh.controller;

import com.hebeu.gfh.utils.JwtUtil;
import com.hebeu.gfh.utils.UUIDUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * @Author: 刘剑利
 * @Version: v1.0
 */
@RestController
@RequestMapping("/picture")
public class pictureController {

    private String fileBasePath="E:/IDEA/workspace_idea/GFH/src/main/resources/static";
    private String fileBasePath1="E:/IDEA/workspace_idea/GFH/target/classes/static";
    //活动图片上传路径
    @PostMapping("/pushPic")
    public String pushPic(MultipartFile file) {
        System.out.println("#####上传文件#####");
        try {
            //2.命名方式
            String fileName = new java.util.Date().getTime() + UUIDUtil.getNumber(8)
                    + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            System.out.println(fileName);
            //3.文件上传的路径
            String path = fileBasePath+"/image/activity";
            //4.文件夹不存在则重建
            java.io.File newFile = new java.io.File(path);
            if (!newFile.exists()) {
                newFile.mkdirs();
            }
            //6.上传
            file.transferTo(new java.io.File(newFile, fileName));
            //7.修改数据库
            String imageUrl = "image/activity/" + fileName;
            //传到target
            // 构造新的文件路径（确保/image/vote是目录）
            Path newPathDir = Paths.get(fileBasePath1, "image", "activity");
            // 如果目录不存在，则创建它
            if (!Files.exists(newPathDir)) {
                try {
                    Files.createDirectories(newPathDir);
                } catch (IOException e) {
                    e.printStackTrace();
                    return "error";
                }
            }
            // 构造原始文件的完整路径
            Path oldFilePath = Paths.get(path, fileName);
            // 构造新文件的完整路径（包括文件名）
            Path newFilePath = newPathDir.resolve(fileName);
            // 复制文件
            try {
                Files.copy(oldFilePath, newFilePath, StandardCopyOption.REPLACE_EXISTING);
                System.out.println("文件已成功复制！");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return imageUrl;
        }catch (Exception e){
            System.out.println(e);
            return "error";
        }
    }

    //图文投票上传路径
    @PostMapping("/pushVotePic")
    public String pushVotePic(MultipartFile file) {
        System.out.println("#####上传文件#####");
        try {
            //2.命名方式
            String fileName = new java.util.Date().getTime() + UUIDUtil.getNumber(8)
                    + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            System.out.println(fileName);
            //3.文件上传的路径
            String path = fileBasePath+"/image/vote";
            //4.文件夹不存在则重建
            java.io.File newFile = new java.io.File(path);
            if (!newFile.exists()) {
                newFile.mkdirs();
            }
            //6.上传
            file.transferTo(new java.io.File(newFile, fileName));
            //7.修改数据库
            String imageUrl = "image/vote/" + fileName;
            //传到target
            // 构造新的文件路径（确保/image/vote是目录）
            Path newPathDir = Paths.get(fileBasePath1, "image", "vote");
            // 如果目录不存在，则创建它
            if (!Files.exists(newPathDir)) {
                try {
                    Files.createDirectories(newPathDir);
                } catch (IOException e) {
                    e.printStackTrace();
                    return "error";
                }
            }
            // 构造原始文件的完整路径
            Path oldFilePath = Paths.get(path, fileName);
            // 构造新文件的完整路径（包括文件名）
            Path newFilePath = newPathDir.resolve(fileName);
            // 复制文件
            try {
                Files.copy(oldFilePath, newFilePath, StandardCopyOption.REPLACE_EXISTING);
                System.out.println("文件已成功复制！");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return imageUrl;
        }catch (Exception e){
            System.out.println(e);
            return "error";
        }
    }

    //修改头像
    @PostMapping("/pushUserpic")
    public String pushUserpic(MultipartFile file) {
        System.out.println("#####上传文件#####");
        try {
            //2.命名方式
            String fileName = new java.util.Date().getTime() + UUIDUtil.getNumber(8)
                    + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            System.out.println(fileName);
            //3.文件上传的路径
            String path = fileBasePath+"/image";
            //4.文件夹不存在则重建
            java.io.File newFile = new java.io.File(path);
            if (!newFile.exists()) {
                newFile.mkdirs();
            }
            //6.上传
            file.transferTo(new java.io.File(newFile, fileName));
            //7.修改数据库
            String imageUrl = "image/" + fileName;
            //传到target
            // 构造新的文件路径（确保/image/vote是目录）
            Path newPathDir = Paths.get(fileBasePath1, "image");
            // 如果目录不存在，则创建它
            if (!Files.exists(newPathDir)) {
                try {
                    Files.createDirectories(newPathDir);
                } catch (IOException e) {
                    e.printStackTrace();
                    return "error";
                }
            }
            // 构造原始文件的完整路径
            Path oldFilePath = Paths.get(path, fileName);
            // 构造新文件的完整路径（包括文件名）
            Path newFilePath = newPathDir.resolve(fileName);
            // 复制文件
            try {
                Files.copy(oldFilePath, newFilePath, StandardCopyOption.REPLACE_EXISTING);
                System.out.println("文件已成功复制！");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return imageUrl;
        }catch (Exception e){
            System.out.println(e);
            return "error";
        }
    }


    //上传社团徽章
    @PostMapping("/pushBadgepic")
    public String pushBadgepic(MultipartFile file) {
        System.out.println("#####上传文件#####");
        try {
            //2.命名方式
            String fileName = new java.util.Date().getTime() + UUIDUtil.getNumber(8)
                    + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            System.out.println(fileName);
            //3.文件上传的路径
            String path = fileBasePath+"/image/club/badge";
            //4.文件夹不存在则重建
            java.io.File newFile = new java.io.File(path);
            if (!newFile.exists()) {
                newFile.mkdirs();
            }
            //6.上传
            file.transferTo(new java.io.File(newFile, fileName));
            //7.修改数据库
            String imageUrl = "http://localhost:8080/image/club/badge/" + fileName;
            //传到target
            // 构造新的文件路径（确保/image/vote是目录）
            Path newPathDir = Paths.get(fileBasePath1, "image","club","badge");
            // 如果目录不存在，则创建它
            if (!Files.exists(newPathDir)) {
                try {
                    Files.createDirectories(newPathDir);
                } catch (IOException e) {
                    e.printStackTrace();
                    return "error";
                }
            }
            // 构造原始文件的完整路径
            Path oldFilePath = Paths.get(path, fileName);
            // 构造新文件的完整路径（包括文件名）
            Path newFilePath = newPathDir.resolve(fileName);
            // 复制文件
            try {
                Files.copy(oldFilePath, newFilePath, StandardCopyOption.REPLACE_EXISTING);
                System.out.println("文件已成功复制！");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return imageUrl;
        }catch (Exception e){
            System.out.println(e);
            return "error";
        }
    }
}
